﻿using System;
using System.Collections.Generic;
using log4net;
using Iudicium.Servicios;

/// <summary>
/// Descripción breve de ActividadCRN
/// </summary>
namespace Iudicium.Actividades.CRN
{
    public class ActividadCRN
    {
        private static readonly ILog log = LogManager.GetLogger("LogFile");

        public ActividadCRN()
        {
            //
            // TODO: Agregar aquí la lógica del constructor
            //
        }

        public static int InsertActividad(Actividad objActividad)
        {
            if (objActividad == null)
            {
                throw new ArgumentException("la Actividad no puede ser nula.");
            }
            if (string.IsNullOrEmpty(objActividad.Descripcion))
            {
                throw new ArgumentException("La descripcion de la actividad no puede ser nula o vacia.");
            }

            if (objActividad.ServicioId <= 0)
            {
                throw new ArgumentException("el servicioid no puede ser menor o igual a cero");
            }

            if (objActividad.FechaActividad == null)
            {
                throw new ArgumentException("la fecha de actividad no puede ser nula");
            }

            int? ActividadId = 0;

            ActividadDSTableAdapters.ActividadTableAdapter adapter =
                new ActividadDSTableAdapters.ActividadTableAdapter();

            adapter.Insert(ref ActividadId,objActividad.ServicioId, objActividad.FechaActividad,objActividad.Descripcion);

            if (ActividadId == null)
            {
                throw new Exception("La sentencia SQL se ejecuto correctamente pero no se genero la llave primaria");
            }

            return ActividadId.Value;
        }

        public static void UpdateActividad(Actividad objActividad)
        {
            if (objActividad == null)
            {
                throw new ArgumentException("la Actividad no puede ser nula.");
            }
            if (objActividad.ServicioId <= 0)
            {
                throw new ArgumentException("el servicioid no puede ser menor o igual a cero");
            }
            if (string.IsNullOrEmpty(objActividad.Descripcion))
            {
                throw new ArgumentException("La descripcion de la actividad no puede ser nula o vacia.");
            }

            if (objActividad.ActividadId <= 0)
            {
                throw new ArgumentException("la Actividadid no puede ser menor o igual a cero");
            }

            if (objActividad.FechaActividad == null)
            {
                throw new ArgumentException("la fecha de actividad no puede ser nula");
            }
            ActividadDSTableAdapters.ActividadTableAdapter adpater =
                   new ActividadDSTableAdapters.ActividadTableAdapter();

            adpater.Update(objActividad.ActividadId, objActividad.ServicioId, objActividad.FechaActividad, objActividad.Descripcion);

        }

        public static void DeleteActividad(int ActividadId)
        {
            if (ActividadId <= 0)
            {
                throw new ArgumentException("ActividadId no puede ser menor o igual que cero.");
            }
            ActividadDSTableAdapters.ActividadTableAdapter adpater =
                  new ActividadDSTableAdapters.ActividadTableAdapter();

            adpater.Delete(ActividadId);
        }

        public static Actividad GetActividadById(int ActividadId, int ServicioId)
        {
            if (ActividadId <= 0)
            {
                throw new ArgumentException("ActividadId no puede ser menor o igual que cero.");
            }

            ActividadDSTableAdapters.ActividadTableAdapter adpater =
                new ActividadDSTableAdapters.ActividadTableAdapter();

            ActividadDS.ActividadDataTable tabla =
                adpater.GetActividadById(ActividadId, ServicioId);

            if (tabla == null || tabla.Rows.Count == 0)
            {
                throw new Exception("No se pudo obtener la actividad " + ActividadId + " de la base de datos");
            }
            return ConstruirActividad(tabla[0], ServicioId);
        }

        public static List<Actividad> GetActividadBySearch(string parametro, int servicioId)
        {
            List<Actividad> lista = new List<Actividad>();

            ActividadDSTableAdapters.ActividadTableAdapter adpater =
                  new ActividadDSTableAdapters.ActividadTableAdapter();

            ActividadDS.ActividadDataTable tabla =
                adpater.GetActividadBySearch(parametro, servicioId);

            if (tabla == null)
            {
                throw new Exception("No se pudo obtener resultados de la busqueda con el parametro " +
                    parametro +
                    " de la base de datos");
            }

            foreach (ActividadDS.ActividadRow row in tabla)
            {
                Actividad obj = ConstruirActividad(row, servicioId);
                if (obj != null)
                    lista.Add(obj);
            }
            return lista;
        }

        public static Actividad ConstruirActividad(ActividadDS.ActividadRow row, int servicioId)
        {
            if (row == null)
                return null;
            return new Actividad(row.actividadId, servicioId, row.fechaActividad, row.descripcion,row.RowNumber);

        }

    }
}
